package com.zhongwang.mms.module.tool.listner;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.zhongwang.mms.module.tool.callback.OffMaterCallBack;
import com.zhongwang.mms.module.tool.controller.AccOffMaterController;
import com.zhongwang.mms.module.tool.dao.AccOffMaterDao;
import com.zhongwang.mms.module.tool.model.AccOffMaterModel;
import com.zhongwang.mms.module.tool.model.ReportAccOffMaterModel;
import com.zhongwang.mms.util.ShiroUtils;

import java.util.ArrayList;
import java.util.List;

public class AccOffMaterListener extends AnalysisEventListener<ReportAccOffMaterModel> {
    private AccOffMaterDao accOffMaterDao;
    private OffMaterCallBack offMaterCallBack;
    private List<ReportAccOffMaterModel> reportAccOffMaterModels=new ArrayList<>();

    public AccOffMaterListener(AccOffMaterDao accOffMaterDao,OffMaterCallBack offMaterCallBack){
        this.accOffMaterDao=accOffMaterDao;
        this.offMaterCallBack=offMaterCallBack;
    }
    @Override
    public void invoke(ReportAccOffMaterModel data, AnalysisContext context){
        /**
         * 验证 资产编号、设备名称，其他的都可以为空。
         */
        if (data.getMatCode() == null || data.getMatName() == null) {
            //不合格的数据往这个里放。
            reportAccOffMaterModels.add(data);
            return;
        }
        /**
         * 设置人员信息和删除标识
         */
        data.setMatIsdelete(0);
        AccOffMaterModel keyModel = new AccOffMaterModel();
        //根据资产编号查询
        keyModel.setMatCode(data.getMatCode());
        ReportAccOffMaterModel checkModel= accOffMaterDao.selectAccMater(keyModel);
        if (checkModel != null) {
            data.setMatId(checkModel.getMatId());
            //执行修改，不存在序号的问题。
            data.setMatUpdUser(ShiroUtils.getUser().getName());
            accOffMaterDao.update(data);
        }else{
            //需要查询最大的序号，间隔为10。
            data.setMatSortNum(accOffMaterDao.selectMaxNum());
            data.setMatCreUser(ShiroUtils.getUser().getName());
            data.setMatUpdUser(ShiroUtils.getUser().getName());
            accOffMaterDao.insert(data);
        }
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        if (reportAccOffMaterModels.size() > 0) {
            offMaterCallBack.onWarning(reportAccOffMaterModels);
        } else {
            offMaterCallBack.onSuccess();
        }
    }

    @Override
    public void onException(Exception exception, AnalysisContext context) {
        offMaterCallBack.onError();
    }
}
